package sys

import (
	"ginweb-admin/commons/base/service"
	"ginweb-admin/global"
	"ginweb-admin/model/entity/sys"
)

type SysApiService struct {
	service.BaseService[uint, sys.SysApi]
}

// 查询列表
func (service *SysApiService) FindList(keyword string) (sysApis []*sys.SysApi, err error) {
	db := global.DB.Unscoped().Order("id asc")
	// 检索条件
	if len(keyword) > 0 {
		db = db.Where("title like ?", "%"+keyword+"%")
	}

	// 查询
	err = db.Find(&sysApis).Error
	return sysApis, err
}

// Tree递归
func (service *SysApiService) Tree(allSysApis []*sys.SysApi, parentId uint) []*sys.SysApi {
	// 准备返回的载体
	nodes := []*sys.SysApi{}
	// 开始遍历所有数据
	for _, sysApi := range allSysApis {
		// 遍历根节点数据
		if sysApi.ParentId == parentId {
			// 遍历子节点数据--递归
			childrenApi := service.Tree(allSysApis, sysApi.ID)
			// 判断是否有子节点
			if len(childrenApi) > 0 {
				// 如果有子节点，就添加到children中
				sysApi.Children = append(sysApi.Children, childrenApi...)
			}
			// 返回所有数据
			nodes = append(nodes, sysApi)
		}
	}
	return nodes
}

// 查询父级权限
func (service *SysApiService) FindApiRoot() (sysApis []*sys.SysApi, err error) {
	err = global.DB.Order("id asc").Where("parent_id = ?", 0).Find(&sysApis).Error
	return sysApis, err
}

// 复制权限
func (service *SysApiService) CopyData(id uint) (data *sys.SysApi, err error) {
	// 根据id查询，获取数据
	sysApi, err := service.GetById(id)
	if err != nil {
		return nil, err
	}
	// 开始复制，把id重置，路径变空
	sysApi.ID = 0
	sysApi.Path = ""
	sysApi.Code = ""
	// 保存到数据库
	dbData, err := service.Create(sysApi)
	return dbData, err
}
